package myjava.p_classLoader;

/**
 * @Auther: cty
 * @Date: 2020/4/14 19:02
 * @Description:
 * @version: 1.0
 */

/**
 * 测试自定义的FileSystemClassLoader
 * @author 尚学堂高淇 www.sxt.cn
 *
 */
public class Demo03 {
    // 获取当前工程路径
    static String projectPath = System.getProperty("user.dir");
    // 指定文件输出路径
    static String path = "/Users/cty/mycode";

    public static void main(String[] args) throws Exception{
        FileSystemClassLoader loader = new FileSystemClassLoader(path);
        FileSystemClassLoader loader2 = new FileSystemClassLoader(path);

        Class<?> c = loader.loadClass("Hi");
        Class<?> c2 = loader.loadClass("Hi");
        Class<?> c3 = loader2.loadClass("Hi");
        Class<?> c4 = loader2.loadClass("myjava.p_classLoader.Demo01");
        Class<?> c5 = loader2.loadClass("java.lang.String");
        Class<?> c6 = loader2.loadClass("java.lang.Object");


        System.out.println(c.hashCode());  // o:51228289
        System.out.println(c2.hashCode());  // o:51228289
        System.out.println(c3.hashCode());	// o:455896770  同一个类，被不同的加载器实例加载，JVM认为也是不相同的类

        System.out.println(c.getClassLoader());  // o:com.cty.FileSystemClassLoader@34a245ab  自定义类加载器
        System.out.println(c2.getClassLoader());  // o:com.cty.FileSystemClassLoader@34a245ab  自定义类加载器
        System.out.println(c3.getClassLoader());  // o:com.cty.FileSystemClassLoader@34a245ab  自定义类加载器
        System.out.println(c4.getClassLoader());  // o:jdk.internal.loader.ClassLoaders$AppClassLoader@3fee733d  系统默认的类加载器：应用类加载器
        System.out.println(c5.getClassLoader());  // o:null  启动类加载器
        System.out.println(c6.getClassLoader());  // o:null  启动类加载器
    }
}
